package org.blogwu.learn.temp;
import java.util.LinkedHashMap;
public class TestLinkedHashMap02 {
        public static void main(String[] args) {
            LruCache cache=new LruCache(3);

            LruCache cache1= cache;
            cache1.put("A", 100);
            cache1.put("B", 200);
            cache1.put("C", 300);
            System.out.println(cache1);
            cache1.get("A");
            cache1.put("D", 400);
            System.out.println(cache);//CAD
        }
}
/**
 * 基于LinkedHashMap实现一个基于LRU算法的缓存设计
 * 思考:
 * 1)MyBatis中缓存的设计
 * 2)Spring中的缓存设计
 * 3)EhCache中缓存设计
 * 4)redis中缓存设计
 * 5).....................
 * 自定义LruCache实现
 * 1)有容量限制
 * 2)容器满了要基于LRU算法移出元素
 */
class LruCache extends LinkedHashMap<String,Object>{
    private static final long serialVersionUID = -1838771409260368496L;
    /**设计缓存的最大容量*/
    private int maxCapacity;
    public LruCache(int maxCapacity) {
        super(maxCapacity,0.75f, true);
        this.maxCapacity=maxCapacity;
    }
    /**
     * 方法的返回值决定了容器在满的时是否移除元素.
     * true:表示要移除
     * false:表示不移除
     */
    @Override
    protected boolean removeEldestEntry(java.util.Map.Entry<String, Object> eldest) {
        return size()>maxCapacity;
    }
}